package com.greatwqs.wmall.common.module.util;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * Base64 加解密工具类
 */
public class Base64Util {

    /**
     * 将字符串进行Base64编码
     *
     * @param input 原始字符串
     * @return Base64编码后的字符串
     */
    public static String encode(String input) {
        if (input == null) {
            return null;
        }
        return Base64.getEncoder().encodeToString(input.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * 将Base64字符串解码
     *
     * @param input Base64编码的字符串
     * @return 解码后的原始字符串
     */
    public static String decode(String input) {
        if (input == null) {
            return null;
        }
        byte[] decodedBytes = Base64.getDecoder().decode(input);
        return new String(decodedBytes, StandardCharsets.UTF_8);
    }

    /**
     * 将字节数组进行Base64编码
     *
     * @param bytes 原始字节数组
     * @return Base64编码后的字符串
     */
    public static String encode(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        return Base64.getEncoder().encodeToString(bytes);
    }

    /**
     * 将Base64字符串解码为字节数组
     *
     * @param input Base64编码的字符串
     * @return 解码后的字节数组
     */
    public static byte[] decodeToBytes(String input) {
        if (input == null) {
            return null;
        }
        return Base64.getDecoder().decode(input);
    }

    /**
     * URL安全的Base64编码
     *
     * @param input 原始字符串
     * @return URL安全的Base64编码字符串
     */
    public static String encodeUrlSafe(String input) {
        if (input == null) {
            return null;
        }
        return Base64.getUrlEncoder().encodeToString(input.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * URL安全的Base64解码
     *
     * @param input URL安全的Base64编码字符串
     * @return 解码后的原始字符串
     */
    public static String decodeUrlSafe(String input) {
        if (input == null) {
            return null;
        }
        byte[] decodedBytes = Base64.getUrlDecoder().decode(input);
        return new String(decodedBytes, StandardCharsets.UTF_8);
    }
}